#!/usr/bin/perl
use strict;
use warnings;

use lib $ENV{GL_LIBDIR};
use Gitolite::Rc;
use Gitolite::Common;

=for usage
Usage:  ssh git@host help       # via ssh
        gitolite help           # directly on server command line

Prints a list of custom commands available at this gitolite installation.

Each command has its own help, accessed by passing it '-h' again.
=cut

usage() if @ARGV;

print greeting();

my $user = $ENV{GL_USER} || '';
print "list of " . ( $user ? "remote" : "gitolite" ) . " commands available:\n\n";

my %list = ( list_x( $ENV{GL_BINDIR} ), list_x( $rc{LOCAL_CODE} || '' ) );
for ( sort keys %list ) {
    print "\t$list{$_}" if $ENV{D};
    print "\t$_\n" if not $user or $rc{COMMANDS}{$_};
}

print "\n";
print "$rc{SITE_INFO}\n" if $rc{SITE_INFO};

exit 0;

# ------------------------------------------------------------------------------
sub list_x {
    my $d = shift;
    return unless $d;
    return unless -d "$d/commands";
    _chdir "$d/commands";
    return map { $_ => $d } grep { -x $_ } map { chomp; s(^./)(); $_ } `find . -type f -o -type l|sort`;
}
